perm filename CHART[S,TES]1 blob
sn#038075 filedate 1973-04-22 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 EXPR CHART()
C00008 00003 EXPR INIT()
C00011 ENDMK
C⊗;
EXPR CHART() ;
BEGIN
NEW NAME, YEAR, MONTH, DAY, HOUR, ZONE, LATITUDE, LONGITUDE,
STDTIME, W, GMT, SIDTIMENOON, SIDTIMEG, SIDTIME, SDAY, SGMT,
SMALLT, MCS, SMALLMCD, ASCS, SMALLASCD, SMALLASCM,
BIGT, BIGMCD, BIGASCD, BIGASCM,
PNEXT, PNATAL, PPREV, MC, ASC, S ;
IF NULL('JANUARY.MONTH) THEN INIT() ;
CHOICE(10) ;
PRINTSTR("IN CASE OF TYPO, MAKE NEXT RESPONSE `NIL'") ;
NAME ← RD("NAME") ;
YEAR ← RD("YEAR") ;
DO BEGIN MONTH ← RD("MONTH") ;
IF NOT NUMBERP MONTH THEN MONTH ← MONTH.MONTH ;
END
UNTIL NUMBERP MONTH ;
DAY ← RD("DAY OF THE MONTH") ;
HOUR ← RD("TIME, E.G., 1745 FOR 5:45PM") ;
DO BEGIN
ZONE ← RD("TIME ZONE, E.G., (PACIFIC DAYLIGHT WAR)") ;
W ← (CAR ZONE).WESTOFGREENWICH ;
IF NOT NUMBERP W THEN PRINTSTR("NO SUCH ZONE " CAT CAR(ZONE)) ;
END UNTIL NUMBERP W ;
LATITUDE ← RD("LATITUDE, DEGREES NORTH") ;
LONGITUDE ← RD("LONGITUDE, DEGREES WEST") ;
TERPRI PRINC(<NAME, HOUR, <DAY, MONTHS[MONTH], YEAR>, ZONE,
LATITUDE, 'N, LONGITUDE, 'W>) ;
%MINUTES AFTER MIDNIGHT FROM HERE ON, EXCEPT SECONDS FOR SIDEREAL TIME%
STDTIME ← MINS(HOUR) - ZONECORRECTION(ZONE) ;
GMT ← STDTIME + 60*W ;
TERPRI PRINC(<'GMT, CLOCK(GMT)>) ;
CHOICE(3) ;
SDAY ← IF GMT GREATERP 24*60 THEN DAY+1 ELSE DAY ;
SGMT ← IF GMT GREATERP 24*60 THEN GMT-24*60 ELSE GMT ;
PRINTSTR("GIVE SIDEREAL TIMES IN THE FORM 174552 FOR 17:45:52") ;
SIDTIMENOON ←
SECS(RD("SIDEREAL TIME NOON FOR " CAT YEAR CAT MONTHS[MONTH] CAT SDAY)) ;
SIDTIMEG ← SIDTIMENOON + (361*(SGMT-12*60))/6 ;
SIDTIME ← REMAINDER(SIDTIMEG - 240*LONGITUDE, 24*3600) ;
PRINTSTR("LOOK IN THE TABLE OF HOUSES, LATITUDE "
CAT LATITUDE CAT " N SIDER'L TIMES NEAR " CAT
SCLOCK(SIDTIME)) ;
SMALLT ← SECS(RD("NEXT SMALLER SIDEREAL TIME")) ;
DO MCS ← RD("SIGN IN 10TH HOUSE") UNTIL MCS.SIGN ;
SMALLMCD ← RD("DEGREES") ;
DO ASCS ← RD("SIGN AT ASCENDANT") UNTIL ASCS.SIGN ;
SMALLASCD ← RD("DEGREES") ; SMALLASCM ← RD("MINUTES") ;
BIGT ← SECS(RD("NEXT LARGER SIDEREAL TIME")) ;
BIGMCD ← SMALLMCD+1 ;
BIGASCD ← RD("DEGREES OF " CAT ASCS CAT " AT ASCENDANT") ;
BIGASCM ← RD("MINUTES") ;
SDAY ← IF GMT LESSP 12*60 THEN DAY-1 ELSE DAY ;
PRINTSTR("NOW TURN TO THE EPHEMERIS FOR " CAT YEAR CAT
MONTHS[MONTH] CAT SDAY) ;
FOR NEW D ← 1 TO 3 DO
BEGIN
IF D=3 THEN S←RD("TYPE OUTPUT FILENAME OR TTY (OR NIL)") ALSO
BEGIN IF S NEQ 'TTY THEN EVAL(<'OUTC,<'OUTPUT,'DSK?:,S>>) END
ELSE CHOICE(3) ;
PRINTSTR(CASE D OF BEGIN
"ENTER NOON POSITIONS OF THE PLANETS (FOR PLUTO, 1ST OF MONTH)";
"DO THE SAME FOR " CAT MONTHS[MONTH] CAT (SDAY+1);
"HERE ARE THE NATAL POSITIONS"
END) ;
FOR NEW P IN '(SUN VENUS MERCURY MOON SATURN JUPITER MARS URANUS
NEPTUNE PLUTO) DO
CASE D OF
BEGIN
P.PREV ← <DO S←RD(P CAT " SIGN") UNTIL S.SIGN,
RD("DEGREES"), RD("MINUTES")> ;
P.NEXT ← <S←CAR(P.PREV),
RD("DEGREES OF " CAT S CAT " FOR " CAT P), RD("MINUTES")> ;
BEGIN
PNEXT ← P.NEXT ; PPREV ← P.PREV ;
PNATAL ←
IF P EQ 'PLUTO THEN INTERP(SDAY, 1, 60*PPREV[2]+PPREV[3],
LASTDAY[MONTH]+1, 60*PNEXT[2]+PNEXT[3])
ELSE INTERP(GMT,
IF GMT LESSP 12*60 THEN -12*60 ELSE 12*60, 60*PPREV[2]+PPREV[3],
IF GMT LESSP 12*60 THEN 12*60 ELSE 36*60, 60*PNEXT[2]+PNEXT[3]) ;
TERPRI PRINC(<P, ARC(PNATAL), PPREV[1]>) ;
END ;
END ;
END ;
MC ← INTERP(SIDTIME, SMALLT, SMALLMCD*60,
BIGT, BIGMCD*60) ;
ASC ← INTERP(SIDTIME, SMALLT, SMALLASCD*60+SMALLASCM,
BIGT, BIGASCD*60+BIGASCM) ;
TERPRI PRINC(<'MIDHEAVEN, ARC(MC), MCS>) ;
TERPRI PRINC(<'ASCENDANT, ARC(ASC), ASCS>) ;
TERPRI PRINC(NAME) ;
OUTC(NIL,T);
RD("TYPE `NIL' TO MAKE CORRECTIONS NOW") ;
END ;
EXPR INIT() ;
BEGIN
FOR NEW I ← 4 TO 8 FOR NEW Z IN '(ATLANTIC EASTERN
CENTRAL MOUNTAIN PACIFIC) DO
Z.WESTOFGREENWICH ← I ;
FOR NEW I ← 1 TO 12 FOR NEW S IN '(ARIES TAURUS GEMINI
CANCER LEO VIRGO LIBRA SCORPIO SAGITTARIUS CAPRICORN AQUARIUS
PISCES) DO
S.SIGN ← I ;
FOR NEW I ← 1 TO 12 FOR NEW M IN '((JANUARY JAN)(FEBRUARY FEB)
(MARCH MAR) (APRIL APR) (MAY) (JUNE) (JULY) (AUGUST AUG)
(SEPTEMBER SEP) (OCTOBER OCT) (NOVEMBER NOV) (DECEMBER DEC))
DO FOR NEW MM IN M DO MM.MONTH ← I ;
MONTHS ← <" JANUARY ", " FEBRUARY ", " MARCH ", " APRIL ", " MAY ",
" JUNE ", " JULY ", " AUGUST ", " SEPTEMBER ", " OCTOBER ",
" NOVEMBER ", " DECEMBER "> ;
LASTDAY ← '(31 28 31 30 31 30 31 31 30 31 30 31) ;
END ;
EXPR INTERP(KEY, PREKEY, PREVAL, POSTKEY, POSTVAL) ;
((POSTVAL-PREVAL)*(KEY-PREKEY))/(POSTKEY-PREKEY) + PREVAL ;
EXPR RD(N) ;
BEGIN
NEW RDVAL ;
PRINTSTR(N CAT " = ") ;
RDVAL ← READ() ;
IF ¬RDVAL THEN DDPNT() ALSO FAILURE() ;
RETURN RDVAL ;
END ;
EXPR ZONECORRECTION(Z) ;
60*((IF 'DAYLIGHT MEMQ Z THEN 1 ELSE 0)
+(IF 'WAR MEMQ Z THEN 1 ELSE 0)) ;
EXPR MINS(HR) ; 60*QUOTIENT(HR,100) + REMAINDER(HR,100) ;
EXPR SECS(HR) ; 3600*QUOTIENT(HR,10000) + MINS(REMAINDER(HR,10000)) ;
EXPR CLOCK(MS) ; 100*QUOTIENT(MS,60) + REMAINDER(MS,60) ;
EXPR SCLOCK(SS) ; 10000*QUOTIENT(SS,3600) + CLOCK(REMAINDER(SS,3600)) ;
EXPR ARC(MS) ; (QUOTIENT(MS,60)) CAT "⊗ " CAT REMAINDER(MS,60) CAT "'" ;
EXPR CHOICE(N) ;
SELECT II FROM II:1 SUCCESSOR II+1 UNLESS II GREATERP N FINALLY FAILURE() ;
_EOF_